"""
  * 1.before_first_request:在处理第一个请求前执行

  * [记住]2.before_request:在每次请求前执行,在该装饰函数中,一旦return,视图函数不再执行

  * [记住]3.after_request:如果没有抛出错误，在每次请求后执行

    接受一个参数：视图函数作出的响应
    在此函数中可以对响应值,在返回之前做最后一步处理,再返回

  * 4.teardown_request：在每次请求后执行
"""""

from flask import Flask
app =Flask(__name__)

# @app.before_first_request # 在第一次访问时被执行，适合初始化操作，比如io文件读写
# def before_first_request():
#     print("before_first_request")

@app.before_request # 每次请求前都执行，适合对请求参数做校验，访问统计
def before_request():
    print("before_request")

@app.after_request # 视图函数执行后，该方法返回，适合对返回值统一处理。比如：返回同一json数据格式
def after_request(resp): # 程序执行返回体会到resp里面
    resp.headers['Content-Type'] = "application/json"
    print("after_request")
    return resp

@app.teardown_request # 请求销毁后执行，适合异常信息统计
def teardown_request(e):
    print(e)
    print("teardown_request")



@app.route("/")
def hello():
    return "hello"


if __name__ == '__main__':
    app.run(debug=True)
